"use strict"

class RandomAcessInputStream  {

	constructor(data,buf){
	    super.constructor
        this.data=new Uint8Array(data);
        this.pos=0;
        this.buf=buf;
        this.count=data.byteLength
    }
    read(){
        let nextVal=  (this.pos < this.count) ? (this.data[this.pos++] & 0xff) : -1;
        return nextVal;

	}

	readInt(){
        let ch1 = this.read();
        let ch2 = this.read();
        let ch3 = this.read();
        let ch4 = this.read();
        return (ch1 + (ch2 << 8) + (ch3 << 16) + (ch4 << 24));
	}
	 readUnsignedShort(){
        let ch1 = this.read();
        let ch2 = this.read();
        return ((ch2 << 8) + ch1);
	}
	seek(pos){
        this.pos=pos;
	}
    slice(start,end){
        return this.data.slice(start,end);
    }
}

/*
function RandomAcessInputStream(data,buf){
this.data=data;
this.pos=0;
this.buf=buf;
}

RandomAcessInputStream.prototype = {
    constructor: RandomAcessInputStream,  //每个函数都有prototype属性，指向该函数原型对象，原型对象都有constructor属性，这是一个指向prototype属性所在函数的指针
    read: function(){
		this.pos=this.pos+this.buf;
		let nextVal=this.data.slice(this.pos-this.buf,this.pos);
    	return nextVal;
    },
	slice:function(start,end){

		return this.data.slice(start,end);
	},
    readInt:function(){
		let ch1 = this.read();
		let ch2 = this.read();
		let ch3 = this.read();
		let ch4 = this.read();
		return (ch1 + (ch2 << 8) + (ch3 << 16) + (ch4 << 24));
    },
    readUnsignedShort:function(){
		let ch1 = this.read();
		let ch2 = this.read();
	return ((ch2 << 8) + ch1);
		},
	seek:function (pos) {
		this.pos=pos;
	}
}
 */